package persistencia.DAOs;
import java.sql.ResultSet;
import java.sql.SQLException;

import persistencia.AccesoBD;
import persistencia.DataParametros;
import persistencia.EnumTipoParam;
import persistencia.PersistenciaException;


import logica.datatypes.DataEmpresa;


//
//
//
//  @ Archivo : DAO EMPRESAS.java
//  @ Fecha : 03/12/2010
//  @ Author : IUASP
//
//


public class DAOEmpresasMySQL implements IDAOEmpresas{
	
	public DAOEmpresasMySQL() throws PersistenciaException {
				
	}
	
	public void insert(DataEmpresa dataEmpresa) throws PersistenciaException, SQLException, ClassNotFoundException {	
		DataParametros param[] = new DataParametros[2];
		AccesoBD con = AccesoBD.getInstance();
		param[0] = new DataParametros(EnumTipoParam.INT,dataEmpresa.getRut());
		param[1] = new DataParametros(EnumTipoParam.STRING,dataEmpresa.getRazon_Social());
		con.abrirCon();
		con.excecUpdate("Insert into empresas (RUT, RazonSocial) values (?,?)", param);
		con.cerrarCon();
	}
	
	public boolean member(int rut) throws PersistenciaException, SQLException, ClassNotFoundException {		
		DataParametros param[] = new DataParametros[1];
		AccesoBD con = AccesoBD.getInstance();
		con.abrirCon();
		
		param[0] = new DataParametros(EnumTipoParam.INT, rut);
		ResultSet rs = con.execQuery("Select RUT from empresas where RUT = ?", param);
		boolean existe = false;
		while(!existe && rs.next())
		{
			existe = true;
		} 
		con.cerrarCon();
		return existe;	
	}
	
	public DataEmpresa find(int rut) throws SQLException, PersistenciaException, ClassNotFoundException {
		DataParametros param[] = new DataParametros[1];
		DataEmpresa result;
		AccesoBD con = AccesoBD.getInstance();
		con.abrirCon();
		param[0] = new DataParametros(EnumTipoParam.INT, rut);
		ResultSet rs = con.execQuery("Select RUT, RazonSocial from empresas where RUT = ?", param);
		rs.first();	
		result = new DataEmpresa(rs.getInt("RUT"),rs.getString("RazonSocial"));
		con.cerrarCon();
		return result;	
	}
	
	public void Eliminar(int rut) throws PersistenciaException, SQLException, ClassNotFoundException {
		DataParametros param[] = new DataParametros[1];
		AccesoBD con = AccesoBD.getInstance();
		con.abrirCon();
		param[0] = new DataParametros(EnumTipoParam.INT, rut);
		con.excecUpdate("Delete from empresas where RUT=?", param);
		con.cerrarCon();
	}
	
	
	public boolean tieneEmpleados (int rut) throws PersistenciaException, SQLException, ClassNotFoundException{
		DataParametros param[] = new DataParametros[1];
		AccesoBD con = AccesoBD.getInstance();
		con.abrirCon();
		param[0] = new DataParametros(EnumTipoParam.INT, rut);
		ResultSet rs = con.execQuery("Select RUT from empleados where RUT = ?", param);
		boolean existe = false;
		while(!existe && rs.next())
		{
			existe = true;
		}
		con.cerrarCon();
		return existe;		
	}
	
	public void modificarEmpresa(DataEmpresa dataEmpresa) throws SQLException, PersistenciaException, ClassNotFoundException {
		
		DataParametros param[] = new DataParametros[2];
		AccesoBD con = AccesoBD.getInstance();
		param[0] = new DataParametros(EnumTipoParam.STRING,dataEmpresa.getRazon_Social());
		param[1] = new DataParametros(EnumTipoParam.INT,dataEmpresa.getRut());
		con.abrirCon();
		con.excecUpdate("Update empresas Set RazonSocial = ? where RUT = ?", param);
		con.cerrarCon();
	}
	
	public DataEmpresa[] listadoEmpresas() throws SQLException, ClassNotFoundException, PersistenciaException {

		AccesoBD con = AccesoBD.getInstance();
		con.abrirCon();
		
		ResultSet rs = con.execQuery("Select * from empresas");
		
		int cantEmpresas = con.cantTuplas(rs);
		DataEmpresa[] dataEmpresas = new DataEmpresa[cantEmpresas];
		
		int i=0;
		while(rs.next() && i < cantEmpresas){						
			dataEmpresas[i] = new DataEmpresa(rs.getInt("RUT"),rs.getString("RazonSocial").trim());
			i++;
		} 
		con.cerrarCon();
		return dataEmpresas;
	}

}
